// 什么是函数式编程？ 概念
// 范式，用函数来"组合"以及"处理数据" (将运算过程抽象成函数) 复用

// pp 面向过程， 一步一步的按照需求完成代码

const arr = [1, 2, 3, 4, 5, 6];
// let total = 0;
// for (let i = 0; i < arr.length; i++) {
//   // 运算过程
//   total += arr[i];
// }
// console.log(total);

// oop 将逻辑分解成对象， 对象可以完成自己的功能，有自己的行为 (实例，继承，实现，封装，多态,扩展)

// class Calc {
//   constructor() {
//     this.total = 0;
//   }
//   sum(arr) {
//     for (let i = 0; i < arr.length; i++) {
//       // 运算过程
//       this.total += arr[i];
//     }
//   }
// }
// const calc = new Calc();

// js只能单个继承， 继承会让功能逻辑变得复杂

// fp 函数式编程 数学意义上 y = f(x)  可以让多个函数组合起来使用。 组合高于继承

// reduce 内部肯定实现了具体的累加逻辑， 我们不关心， 只需要将自己的逻辑和reduce组合起来使用即可
const total = arr.reduce((memo, prev) => memo + prev, 0); // 高阶函数 + 纯函数 实现函数式编程
console.log(total);
